#!usr/bin/env python  
# -*- coding:utf-8 -*-
""" 
@author:robot
@file: water.py 
@version:
@time: 2023/12/29


               _
       _ .....| |_ .._
   _ ..| |_  _| | |_| |
 _|_|_|_|_|_|_|_|_|_|_|
"""
array = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2]


def water(height):
    left = 0
    right = len(height) - 1
    leftmax = rightmax = 0
    res = 0
    while left < right:
        """
        存储水量是由较矮的一边决定的，在判断过程中，如果左侧柱更矮，那么说明当前柱子的右侧一定存在比它本身高的柱，这中间可以容纳水，
        此时只需考虑当前柱的左侧是否有比它本身高的柱即可。
        
        如果有，那么计算储水量，累计到res变量中；如果没有，则需要更新左侧最高柱的高度值。之后左指针向右移动，即增加1.


        如果右侧的柱更矮，则与左侧同理，右指针向左移动，减小1.
        """
        if height[left] < height[right]:
            if height[left] >= leftmax:
                leftmax = height[left]
            else:
                res += leftmax - height[left]
            left += 1
        else:
            if height[right] >= rightmax:
                rightmax = height[right]
            else:
                res += rightmax - height[right]
            right -= 1
    return res


if __name__ == '__main__':
    print(water(array))
